BemÀstra TypeScript-konfiguration med denna djupgÄende guide till tsconfig.json. LÀr dig viktiga kompilatoralternativ, projektinstÀllningar och avancerade konfigurationer för effektiv utveckling.
TypeScript-konfiguration: En omfattande guide till tsconfig.json
TypeScript, ett superset av JavaScript, inför statisk typning i den dynamiska vÀrlden av webbutveckling. En vÀlkonfigurerad tsconfig.json
-fil Àr avgörande för att utnyttja den fulla kraften i TypeScript. Denna guide ger en omfattande översikt av tsconfig.json
och tÀcker viktiga kompilatoralternativ, projektinstÀllningar och avancerade konfigurationer.
Vad Àr tsconfig.json?
Filen tsconfig.json
Àr en konfigurationsfil som specificerar kompilatoralternativen för ett TypeScript-projekt. Den talar om för TypeScript-kompilatorn hur den ska transpilera TypeScript-kod till JavaScript. Denna fil Àr fundamental för att definiera projektets struktur, stÀlla in kompileringsregler och sÀkerstÀlla konsekvens inom utvecklingsteamet, oavsett om teamet Àr baserat pÄ ett enda kontor eller Àr distribuerat över flera kontinenter.
Skapa en tsconfig.json-fil
För att skapa en tsconfig.json
-fil, navigera till ditt projekts rotkatalog i terminalen och kör följande kommando:
tsc --init
Detta kommando genererar en grundlÀggande tsconfig.json
-fil med vanliga kompilatoralternativ. Du kan sedan anpassa filen för att passa ditt projekts specifika krav. En typisk tsconfig.json
kommer att inkludera alternativ som compilerOptions
, include
och exclude
.
Viktiga kompilatoralternativ
Avsnittet compilerOptions
Àr hjÀrtat i tsconfig.json
-filen. Det innehÄller ett brett utbud av alternativ som styr TypeScript-kompilatorns beteende. HÀr Àr nÄgra av de viktigaste kompilatoralternativen:
target
Alternativet target
specificerar ECMAScript-mÄlversionen för den genererade JavaScript-koden. Vanliga vÀrden inkluderar ES5
, ES6
(ES2015), ES2016
, ES2017
, ES2018
, ES2019
, ES2020
, ES2021
, ES2022
, ESNext
. Att vÀlja rÀtt mÄl Àr avgörande för att sÀkerstÀlla kompatibilitet med den avsedda körtidsmiljön, som webblÀsare eller Node.js-versioner.
Exempel:
{
"compilerOptions": {
"target": "ES2020"
}
}
module
Alternativet module
specificerar stilen för modulkodsgenerering. Vanliga vÀrden inkluderar CommonJS
, AMD
, System
, UMD
, ES6
(ES2015), ES2020
och ESNext
. Valet av modulsystem beror pÄ mÄlmiljön och den modul-bundler som anvÀnds (t.ex. Webpack, Rollup, Parcel). För Node.js anvÀnds ofta CommonJS
, medan för moderna webbapplikationer föredras ES6
eller ESNext
med en modul-bundler. Att anvÀnda ESNext
gör det möjligt för utvecklare att utnyttja de senaste funktionerna och optimeringarna, samtidigt som de förlitar sig pÄ att bundlern hanterar det slutliga modulformatet.
Exempel:
{
"compilerOptions": {
"module": "ESNext"
}
}
lib
Alternativet lib
specificerar en lista över biblioteksfiler som ska inkluderas i kompileringen. Dessa biblioteksfiler tillhandahÄller typdefinitioner för inbyggda JavaScript-API:er och webblÀsar-API:er. Vanliga vÀrden inkluderar ES5
, ES6
, ES2015
, ES2016
, ES2017
, ES2018
, ES2019
, ES2020
, ES2021
, ES2022
, ESNext
, DOM
, WebWorker
, ScriptHost
, ES2015.Core
, ES2015.Collection
, ES2015.Iterable
, ES2015.Promise
, ES2015.Proxy
, ES2015.Reflect
, ES2015.Generator
, ES2015.Symbol
, ES2015.Symbol.WellKnown
, ES2016.Array.Include
, ES2017.object
, ES2017.Intl
, ES2017.SharedMemory
, ES2017.String
, ES2017.TypedArrays
, ES2018.Intl
, ES2018.Promise
, ES2018.RegExp
, ES2019.Array
, ES2019.Object
, ES2019.String
, ES2019.Symbol
, ES2020.BigInt
, ES2020.Promise
, ES2020.String
, ES2020.Symbol.WellKnown
, ES2021.Promise
, ES2021.String
, ES2021.WeakRef
, ES2022.Error
, ES2022.Object
, ES2022.String
, och mÄnga fler. Att vÀlja lÀmpliga bibliotek sÀkerstÀller att TypeScript-kompilatorn har den nödvÀndiga typinformationen för mÄlmiljön. AnvÀndning av DOM-biblioteket gör att projektet kan kompilera kod som anvÀnder webblÀsarspecifika API:er utan typfel.
Exempel:
{
"compilerOptions": {
"lib": ["ES2020", "DOM"]
}
}
allowJs
Alternativet allowJs
tillÄter TypeScript-kompilatorn att kompilera JavaScript-filer tillsammans med TypeScript-filer. Detta Àr anvÀndbart för att stegvis migrera befintliga JavaScript-projekt till TypeScript. Att stÀlla in detta till true
gör det möjligt för kompilatorn att bearbeta .js
-filer, vilket möjliggör en gradvis anpassning till TypeScript inom ett projekt.
Exempel:
{
"compilerOptions": {
"allowJs": true
}
}
jsx
Alternativet jsx
specificerar hur JSX-syntax ska hanteras. Vanliga vÀrden inkluderar preserve
, react
, react-native
och react-jsx
. preserve
bevarar JSX-syntaxen i output, medan react
omvandlar JSX till React.createElement-anrop. react-jsx
anvÀnder den nya JSX-transformeringen som introducerades i React 17, vilken inte krÀver import av React. Att vÀlja rÀtt JSX-alternativ Àr avgörande för projekt som anvÀnder React eller andra JSX-baserade bibliotek.
Exempel:
{
"compilerOptions": {
"jsx": "react-jsx"
}
}
declaration
Alternativet declaration
genererar motsvarande .d.ts
-deklarationsfiler för varje TypeScript-fil. Deklarationsfiler innehÄller typinformation och anvÀnds av andra TypeScript-projekt för att konsumera den kompilerade koden. Att generera deklarationsfiler Àr avgörande för att skapa ÄteranvÀndbara bibliotek och moduler. Dessa filer gör det möjligt för andra TypeScript-projekt att förstÄ de typer och grÀnssnitt som biblioteket exponerar utan att behöva kompilera den ursprungliga kÀllkoden.
Exempel:
{
"compilerOptions": {
"declaration": true
}
}
sourceMap
Alternativet sourceMap
genererar kÀllkartsfiler (source map files), som mappar den genererade JavaScript-koden tillbaka till den ursprungliga TypeScript-koden. KÀllkartor Àr avgörande för att felsöka TypeScript-kod i webblÀsare och andra miljöer. NÀr ett fel intrÀffar i JavaScript-koden gör kÀllkartan det möjligt för utvecklaren att se motsvarande TypeScript-kod i felsökaren, vilket gör det lÀttare att identifiera och ÄtgÀrda problemet.
Exempel:
{
"compilerOptions": {
"sourceMap": true
}
}
outDir
Alternativet outDir
specificerar utdatakatalogen för de genererade JavaScript-filerna. Detta alternativ hjÀlper till att organisera projektets byggresultat genom att separera kÀllkoden frÄn den kompilerade koden. Att anvÀnda en outDir
gör det lÀttare att hantera byggprocessen och driftsÀtta applikationen.
Exempel:
{
"compilerOptions": {
"outDir": "dist"
}
}
rootDir
Alternativet rootDir
specificerar rotkatalogen för TypeScript-projektet. Kompilatorn anvÀnder denna katalog som bas för att matcha modulnamn. Detta alternativ Àr sÀrskilt viktigt för projekt med en komplex katalogstruktur. Att stÀlla in rootDir
korrekt sÀkerstÀller att kompilatorn kan hitta alla nödvÀndiga moduler och beroenden.
Exempel:
{
"compilerOptions": {
"rootDir": "src"
}
}
strict
Alternativet strict
aktiverar alla strikta typkontrollsalternativ. Detta rekommenderas starkt för nya TypeScript-projekt eftersom det hjÀlper till att fÄnga potentiella fel tidigt i utvecklingsprocessen. Aktivering av strikt lÀge framtvingar striktare typkontrollsregler, vilket leder till mer robust och underhÄllbar kod. Det Àr en bÀsta praxis att aktivera strikt lÀge i alla nya TypeScript-projekt.
Exempel:
{
"compilerOptions": {
"strict": true
}
}
esModuleInterop
Alternativet esModuleInterop
möjliggör interoperabilitet mellan CommonJS- och ES-moduler. Detta Àr viktigt för projekt som anvÀnder bÄda typerna av moduler. NÀr esModuleInterop
Àr aktiverat kommer TypeScript automatiskt att hantera skillnaderna mellan CommonJS- och ES-moduler, vilket gör det lÀttare att importera och exportera moduler mellan de tvÄ systemen. Detta alternativ Àr sÀrskilt anvÀndbart nÀr man arbetar med tredjepartsbibliotek som kan anvÀnda olika modulsystem.
Exempel:
{
"compilerOptions": {
"esModuleInterop": true
}
}
moduleResolution
Alternativet moduleResolution
specificerar hur TypeScript löser moduler som importeras. Vanliga vÀrden inkluderar Node
och Classic
. Modulmatchningsstrategin Node
Àr standard och baseras pÄ Node.js modulmatchningsalgoritm. Strategin Classic
Àr Àldre och anvÀnds mer sÀllan. Att anvÀnda Node
-strategin sÀkerstÀller att TypeScript korrekt kan matcha moduler som importeras i en Node.js-miljö.
Exempel:
{
"compilerOptions": {
"moduleResolution": "Node"
}
}
baseUrl
och paths
Alternativen baseUrl
och paths
anvÀnds för att konfigurera modulmatchning för icke-relativa modulimporter. Alternativet baseUrl
specificerar baskatalogen för att matcha icke-relativa modulnamn. Alternativet paths
lÄter dig mappa modulnamn till specifika platser i filsystemet. Dessa alternativ Àr sÀrskilt anvÀndbara för projekt med en komplex katalogstruktur och för att förenkla modulimporter. Att anvÀnda baseUrl
och paths
kan göra koden mer lÀsbar och underhÄllbar.
Exempel:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@components/*": ["src/components/*"],
"@utils/*": ["src/utils/*"]
}
}
}
Inkludera- och exkludera-alternativ
Alternativen include
och exclude
specificerar vilka filer som ska inkluderas i kompileringen och vilka filer som ska exkluderas. Dessa alternativ anvÀnder glob-mönster för att matcha filnamn. Att anvÀnda include
och exclude
lÄter dig styra vilka filer som bearbetas av TypeScript-kompilatorn, vilket förbÀttrar byggprestanda och minskar fel. Det Àr en bÀsta praxis att explicit specificera vilka filer som ska inkluderas i kompileringen.
Exempel:
{
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}
Extends-alternativet
Alternativet extends
lÄter dig Àrva kompilatoralternativ frÄn en annan tsconfig.json
-fil. Detta Àr anvÀndbart för att dela gemensamma konfigurationsinstÀllningar mellan flera projekt eller för att skapa baskonfigurationer. Att anvÀnda extends
-alternativet frÀmjar ÄteranvÀndning av kod och minskar duplicering. Det Àr en bÀsta praxis att skapa baskonfigurationer och utöka dem i enskilda projekt.
Exempel:
{
"extends": "./tsconfig.base.json",
"compilerOptions": {
"jsx": "react-jsx"
},
"include": ["src/**/*"]
}
Avancerade konfigurationer
Utöver de grundlÀggande kompilatoralternativen stöder tsconfig.json
avancerade konfigurationer för specialiserade scenarier.
Inkrementell kompilering
För stora projekt kan inkrementell kompilering avsevÀrt förbÀttra byggtiderna. TypeScript kan cacha resultaten frÄn tidigare kompileringar och endast kompilera om filer som har Àndrats. Att aktivera inkrementell kompilering kan dramatiskt minska byggtiderna för stora projekt. Detta Àr sÀrskilt viktigt för projekt med ett stort antal filer och beroenden.
{
"compilerOptions": {
"incremental": true,
"tsBuildInfoFile": ".tsbuildinfo"
}
}
Projektreferenser
Projektreferenser lÄter dig strukturera stora TypeScript-projekt i mindre, oberoende moduler. Detta kan förbÀttra byggtider och kodorganisation. Att anvÀnda projektreferenser kan göra stora projekt mer hanterbara och lÀttare att underhÄlla. Det Àr en bÀsta praxis att anvÀnda projektreferenser för stora, komplexa projekt.
{
"compilerOptions": {
"composite": true
},
"references": [
{ "path": "./module1" },
{ "path": "./module2" }
]
}
Anpassade typdefinitioner
Ibland kan du behöva tillhandahÄlla typdefinitioner för JavaScript-bibliotek som inte har dem. Du kan skapa anpassade .d.ts
-filer för att definiera typerna för dessa bibliotek. Att skapa anpassade typdefinitioner lÄter dig anvÀnda JavaScript-bibliotek i din TypeScript-kod utan att offra typsÀkerheten. Detta Àr sÀrskilt anvÀndbart nÀr man arbetar med Àldre JavaScript-kod eller bibliotek som inte tillhandahÄller sina egna typdefinitioner.
// custom.d.ts
declare module 'my-library' {
export function doSomething(x: number): string;
}
BĂ€sta praxis
- AnvÀnd strikt lÀge: Aktivera alternativet
strict
för förbÀttrad typkontroll. - Specificera mÄl: VÀlj lÀmplig
target
-version för din körtidsmiljö. - Organisera output: AnvÀnd
outDir
för att separera kÀllkod frÄn kompilerad kod. - Hantera beroenden: AnvÀnd
include
ochexclude
för att styra vilka filer som kompileras. - Utnyttja Extends: Dela gemensamma konfigurationsinstÀllningar med
extends
-alternativet. - Checka in konfigurationen i versionskontroll: Committa `tsconfig.json` till git för att upprÀtthÄlla konsekvens mellan utvecklarmiljöer och CI/CD-pipelines.
Felsökning av vanliga problem
Att konfigurera tsconfig.json
kan ibland vara utmanande. HÀr Àr nÄgra vanliga problem och deras lösningar:
Problem med modulmatchning
Om du stöter pÄ fel med modulmatchning, se till att alternativet moduleResolution
Ă€r korrekt konfigurerat och att alternativen baseUrl
och paths
Àr korrekt instÀllda. Dubbelkolla sökvÀgarna som specificerats i paths
-alternativet för att sÀkerstÀlla att de Àr korrekta. Verifiera att alla nödvÀndiga moduler Àr installerade i node_modules
-katalogen.
Typfel
Typfel kan uppstÄ om typdefinitionerna Àr felaktiga eller saknas. Se till att du har rÀtt typdefinitioner installerade för alla bibliotek du anvÀnder. Om du anvÀnder ett JavaScript-bibliotek som inte har typdefinitioner, övervÀg att skapa anpassade typdefinitioner.
Kompileringsfel
Kompileringsfel kan uppstÄ om det finns syntaxfel eller typfel i din TypeScript-kod. Granska felmeddelandena noggrant och ÄtgÀrda eventuella syntaxfel eller typfel. Se till att din kod följer TypeScript-kodningskonventionerna.
Sammanfattning
En vÀlkonfigurerad tsconfig.json
-fil Àr avgörande för ett framgÄngsrikt TypeScript-projekt. Genom att förstÄ de vÀsentliga kompilatoralternativen och avancerade konfigurationerna kan du optimera ditt utvecklingsarbetsflöde, förbÀttra kodkvaliteten och sÀkerstÀlla kompatibilitet med mÄlmiljön. Att investera tid i att korrekt konfigurera tsconfig.json
kommer att löna sig i lÀngden genom att minska fel, förbÀttra underhÄllbarheten och effektivisera byggprocessen. Detta resulterar i mer effektiv och tillförlitlig mjukvaruutveckling. Informationen som tillhandahÄlls hÀr Àr utformad för att vara universellt tillÀmplig och bör ge en solid grund för att starta ett nytt projekt med TypeScript.
Kom ihÄg att konsultera den officiella TypeScript-dokumentationen för den mest aktuella informationen och detaljerade förklaringar av alla tillgÀngliga kompilatoralternativ. TypeScript-dokumentationen Àr en vÀrdefull resurs för att förstÄ finesserna i TypeScript-konfiguration.